/**
 * Luiz Fernando
 */
package doencas;

import util.RepositorioException;

public class RepositorioDoencasArray implements RepositorioDoencas, IteratorDoencas {
	private Doenca [] doencas;
	private int indice;
	private int iterator;
	private static final int TAMANHO = 100;
	public RepositorioDoencasArray(){
		indice = 0;
		doencas = new Doenca [TAMANHO];
		iterator = 0;
	}

	private int procurarIndice(long codigo) {
		int i = 0;
		int indicador = -1;
		while (doencas[i] != null) {
			if (codigo == doencas[i].getCodigo()) {
				indicador = i;
			}			
			i++;
		}
		return indicador;
	}

	/* (non-Javadoc)
	 * @see doencas.RepositorioDoencas#existe(long)
	 */
	public boolean existe (long codigo) throws RepositorioException{
		boolean resposta = false;
		int i = this.procurarIndice (codigo);
		if (i != -1){
			resposta = true;
		} else {
			resposta = false;
		}
		return resposta;
	}
	/* (non-Javadoc)
	 * @see doencas.RepositorioDoencas#atualizar(doencas.Doenca)
	 */
	public void atualizar (Doenca doenca) throws DoencaNaoEncontradaException,RepositorioException{
		int i = procurarIndice(doenca.getCodigo());
		if (i != -1){
			doencas[i] = doenca;
		} else {
			throw new DoencaNaoEncontradaException(doenca.getCodigo());
		}
	}
	/* (non-Javadoc)
	 * @see doencas.RepositorioDoencas#procurar(long)
	 */
	public Doenca procurar (long codigo) throws DoencaNaoEncontradaException, RepositorioException{
		Doenca d = null;
		if (existe(codigo)){
			int i = this.procurarIndice(codigo);
			d = doencas[i];
		} else {
			throw new DoencaNaoEncontradaException(codigo);
		}
		return d;
	}
	public RepositorioDoencas procurar(Doenca doenca) throws DoencaNaoEncontradaException, RepositorioException {
		if (!existe(doenca.getCodigo())) {
		return null;
	} else {
		RepositorioDoencasArray repositorioRetorno = null;
		for ( int i = 0;i < indice;i++){
			if (doencas[i].match(doenca)){
				repositorioRetorno.inserir(doencas[i]);
			}
		}
		return repositorioRetorno;
	}
}
	/* (non-Javadoc)
	 * @see doencas.RepositorioDoencas#remover(long)
	 */
	public void remover (long codigo) throws DoencaNaoEncontradaException, RepositorioException{
		if (existe(codigo)){
			int i = this.procurarIndice(codigo);
			doencas [i] = doencas[indice - 1];
			doencas [indice - 1] = null;
			indice = indice -1;
		}else {
			throw new DoencaNaoEncontradaException(codigo);
		}
	}
	
	/* (non-Javadoc)
	 * @see doencas.RepositorioDoencas#Inserir(doencas.Doenca)
	 */
	public void inserir(Doenca doenca) throws RepositorioException {
		if (!this.existe(doenca.getCodigo())){
			this.doencas[this.indice] = doenca;
			this.indice ++;
		}
	}
	
	public IteratorDoencas getIterator(){
		iterator = 0;
		return this;
	}
	
	public RepositorioDoencas getDoencas() throws RepositorioException {
		return this;
	}
	
	public boolean hasNext(){
		if (iterator < indice){
			return true;
		}else{
			return false;
		}
	}
	public Doenca next(){
		Doenca d = doencas[iterator];
		iterator = iterator + 1;
		return d;
	}
}